#ifndef __FILE_CHECK__
#define __FILE_CHECK__
#include "cipher.h"
#include "dataBase.h"

#define FILE_NAME_MAX 256 // 文件名最大长度

typedef enum
{
    FILE_EXIST,      // 文件存在
    FILE_NOT_EXIST,  // 文件不存在
    FILE_SAME,       // 同文件
    FILE_NOT_SAME,   // 不同文件
    FILE_RESUME,     // 文件续传
    FILE_NOT_RESUME, //
    FILE_SEND,       // 不是最后一次传输
    FILE_LAST_SEND,  // 最后一次传输
    TRANS_SUCCESS,   // 传输成功
    TRANS_FAILED     // 传输失败
} TransVerific;

// // 存储下载信息用于断点续传
// typedef struct fileCheck_s
// {
//     char file_name[FILE_NAME_MAX]; // 文件名
//     off_t file_offset;             // 已传输数据量
//     off_t file_size;               // 文件的总数据量
//     char sha256[SHA256_LENGTH];    // 完整文件的sha256
// } __attribute__((packed)) fileCheck_t;

// 存储下载信息用于断点续传
typedef struct fileCheck_s
{
    char file_name[FILE_NAME_MAX]; // 文件名
    off_t file_offset;             // 已传输数据量
    off_t file_size;               // 文件的总数据量
    char sha256[SHA256_LENGTH];    // 完整文件的sha256
}fileCheck_t;
// 当前文件是否未传输完成
int isFileCheck(const char *file_name);

// 文件开始传输，创建fileCheck文件
int fileCheckCreate(const char *file_name, const fileCheck_t *file_info);

// 传输中断，更新fileCheke文件
int fileCheckUpdate(const char *file_name, const fileCheck_t *file_info);

// 传输完成，删除fileCheck文件
int fileCheckDelete(const char *file_name);

// 读取fileCheck文件
int fileCheckRead(const char *file_name, fileCheck_t *file_info);

#endif